package com.mazaiting.common.core.utils;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.BeanCopier;
import cn.hutool.core.bean.copier.CopyOptions;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * map 操作工具类
 *
 * @author mazaiting
 * @create_time 2022/9/26 14:25
 */
public class MapUtil {

    /**
     * 将对象转换为 map
     *
     * @param bean 对象 bean
     * @param <T>  泛型 key
     * @param <R>  泛型 value
     * @return map集合
     */
    public static <T, R> Map<T, R> beanToMap(Object bean) {
        return BeanCopier.create(bean, new LinkedHashMap<T, R>(),
                CopyOptions.create()
                        .setIgnoreNullValue(false)
                        .setFieldNameEditor(s -> s)
        ).copy();
    }

    /**
     * map 转换为对象
     *
     * @param map   map 集合
     * @param clazz 实体类
     * @param <T>   泛型
     * @return 实体对象
     */
    public static <T> T mapToBean(Map<?, ?> map, Class<T> clazz) {
        return BeanUtil.mapToBean(map, clazz, false, CopyOptions.create()
                .setIgnoreNullValue(false)
                .setFieldNameEditor(s -> s));
    }
}
